7
תגובות
MySQLi בכל הModels
פתח
yotamN
,
אחרי זמן מה שהשתמשתי בFramework Codeigniter עבור ה MVC החלטתי לבנות אחד בעצמי על פי המדריך של PHPacademy אבל נתקלתי בבעיה, איך אני יכול לעשות שבכל הClassים של ה Models יהיה MySQLi?
חשבתי על לעשות Extends לClass אבל אני לא יודע אם זאת הדרך הנכונה אז אשמח אם תגידו לי מהי הדרך הנכונה
חשבתי על לעשות Extends לClass אבל אני לא יודע אם זאת הדרך הנכונה אז אשמח אם תגידו לי מהי הדרך הנכונה
7 תשובות
אמנם אני ממש לא תומך בגישה כזו, אבל זה בדיוק הכיוון ואיך שזה עובד ב CI.
טכנית, יש מחלקה אחת אבסטרקטית שאתה יורש. המחלקה העליונה בעת היצירה שלה (או בהפעלה של המתודה load ב ci) מכניסה לתוך מאפיין את המופע של מחלקת mysqli שהיא לוקחת מאיפשהו. למשל מאוסף אובייקטים גלובאלי כלשהו.
abstract class BaseModel
{
protected $db;
public function __construct()
{
$this->db = CI::someGlobalStorage->getDb();
}
}
class MyModel extends BaseModel
{
}
{
protected $db;
public function __construct()
{
$this->db = CI::someGlobalStorage->getDb();
}
}
class MyModel extends BaseModel
{
}
@intval נראה לי אני פשוט יעשה ככה:
class MyModel {
private $db = new mysqli();
}
private $db = new mysqli();
}
עריכה:
זה עושה לי שגיאה הקוד הזה כשאני עושה לו Lint
במקרה כזה אתה תיצור לכל אובייקט חיבור למסד ואז במקום שיהיה חיבור אחד יווצרו לך 9-10 חיבורים מה שסתם יאט את המערכת
אני חושב שמה שאלכס הציע לך יותר מתאים מאשר להעביר לבנאי כל פעם את האוביקט של המסד.
יש לך פחות סיכוי לטעות פשוט במקרה הזה ויותר קל לעלות על הטעות כאשר מדובר על פונקציה אחת ולא באלפי קבצים שצריך לחקור.
@Splash עשיתי ככה:
abstract class Model
{
protected $db;
public function __construct()
{
$this->$db = new mysqli('localhost','root','464546gtgfgh','help');
}
}
{
protected $db;
public function __construct()
{
$this->$db = new mysqli('localhost','root','464546gtgfgh','help');
}
}
וזה פשוט לא עובד... אני יגיד את האמת לא יודע מה זה abstract :(